Rewrite blocking support at runtime & add clang pass#18
Rewrite blocking support at runtime & add clang pass#18lim123123123 merged 5 commits intoITMO-PTDC-Team:masterfrom
Conversation
| // Tell that the function need to be converted to the coroutine. | ||
| #define non_atomic attr(ltest_nonatomic) | ||
| // Tell that the function must not contain interleavings. | ||
| #define ___atomic attr(ltest_atomic) |
There was a problem hiding this comment.
имена, начинающиеся с __ зарезервированы для нужд компиляторов (ссылка), объявлять свои макросы/переменные, начиная с __, - уб.
как на счет: ___atomic -> as_atomic/treat_as_atomic/consider_atomic?
| bool CoroBase::IsReturned() const { return is_returned; } | ||
|
|
||
| extern "C" void CoroYield() { | ||
| if (!__yield) [[unlikely]] { |
There was a problem hiding this comment.
лучше все места, где есть нелокальные переменные, начинающиеся с __, переименовать, чтобы нижних подчеркиваний в их начале не было
| add_executable(${target} __tmp_${source_name}) | ||
| # apply clangpass to the ${source_name} file | ||
| add_custom_command( | ||
| OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/__tmp_${source_name} |
There was a problem hiding this comment.
| OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/__tmp_${source_name} | |
| OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${CLANG_TOOL_TMP_PREFIX}${source_name} |
| function(verify_target target) | ||
| add_executable(${target} ${source_name}) | ||
| if (APPLY_CLANG_TOOL) | ||
| add_executable(${target} __tmp_${source_name}) |
There was a problem hiding this comment.
| add_executable(${target} __tmp_${source_name}) | |
| add_executable(${target} ${CLANG_TOOL_TMP_PREFIX}${source_name}) |
| TARGET ${target} | ||
| POST_BUILD | ||
| COMMAND ${CMAKE_COMMAND} -E echo "Removing temporary file '${CMAKE_CURRENT_SOURCE_DIR}/${CLANG_TOOL_TMP_PREFIX}${source_name}' generated after building ${target}" | ||
| COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/__tmp_${source_name} |
There was a problem hiding this comment.
| COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/__tmp_${source_name} | |
| COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/${CLANG_TOOL_TMP_PREFIX}${source_name} |
что-то много где одно и то же встречается, можно переменную тут завести, чтобы покороче писать
9f72bc5 to
7071ce0
Compare
| for (size_t i = 0; i < tasks_in_thread; ++i) { | ||
| if (!IsTaskRemoved(thread[i]->GetId())) { | ||
| thread[i] = thread[i]->Restart(&state); | ||
| thread[i] = thread[i]->Restart(&*state); |
There was a problem hiding this comment.
что за жесть)) почему не state.get()?)
54b8236 to
4fd6690
Compare
e785f08 to
5f840a3
Compare
extend switch point insertion fix hook & folly shared mutex try to setup CI to run folly tests refactor folly_rwspinlock add bank && custom blocking primitives format code speed up futex blocking && change release schema forbid CoroYield calls in inappropriate contexts fix CI add flatcombining queue use renaming action clang_pass: support simple names & several match types refactor enable CI fix livelock problem && get rid of legacy token API format code fix pct backoff strategy add ad-hoc termination order refactor verifying targets fix after rebasing onto minimization patch refactor clang pass rewrite totally blocking support at runtime fix livelock avoiding reformat code && enable testing fix formatting scripts && reformat code fix review comments add conditional variables testing add conditional variable primitive fix futex_queues.PopAll pct_strategy: run round robin for livelock avoding add deadlock detection refactor code refactor StrategyVerifier extend buffered channel test
lim123123123
left a comment
There was a problem hiding this comment.
Мне кажется, что стоит сделать один бинарь, который сразу запустит кланг плагин + рантайм
Что по итогу делаем со старым пассом?
| RUN apt install -y libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev \ | ||
| libdouble-conversion-dev libfast-float-dev libevent-dev libssl-dev libfmt-dev \ | ||
| libgoogle-glog-dev zlib1g-dev && \ | ||
| git clone https://github.com/Kirillog/folly.git && \ |
There was a problem hiding this comment.
Мы теперь каждый раз будем фолли клонить?
There was a problem hiding this comment.
Кажется это чиниться или https://github.com/actions/cache или тем что мы зальем наш образ на условный docker hub и будем его клонить
There was a problem hiding this comment.
Потенциально еще и каждый раз userver пропатченный будем клонить и собирать, вообще хорошо образ на докерхаб залить, я согласен, можно донести это после защит
There was a problem hiding this comment.
Я хз насколько хорошо этот кэш работает, ему по идее нужно на ноде это кэшировать, те на всех раннерах
Докер не поможет особо, только какой-то базовый, тк основной кейс - дебаг нашего кода, те будут правки в рантайме и тд
| return EXIT_FAILURE; | ||
| } | ||
|
|
||
| // auto files = eOptParser->getSourcePathList(); |
| clang::tooling::RefactoringTool tool(options->getCompilations(), | ||
| options->getSourcePathList()); | ||
|
|
||
| return tool.run( |
There was a problem hiding this comment.
Я правильно понимаю, что предполагается использовать это как два бинаря? Сначала прогоняешь этот, потом загоняешь это в runtime?
There was a problem hiding this comment.
nonlinear_queue.cpp -> (clang pass) __tmp_nonlinear_queue.cpp -> (clang++ -fpass-plugin=yieldPass.so) ./nonlinear_queue, который затем уже запускается. Объединить компиляцию с llvm пассом и clang pass нельзя, особенность libTooling API.
There was a problem hiding this comment.
Почему нельзя? Ну сделай main, который сделает proc.Exec("clang++ aboba") + запустит потом что нужно
There was a problem hiding this comment.
В смысле предлагается сделать ltest_clang++, который сначала clang_pass запускает, а потом clang++ -fpass-plugin=yieldPass.so ... ? Честно говоря, clang_pass не настолько готов, чтобы его можно было свободно использовать как часть пайплайна clang-а, который потом будет компилировать большую библиотеку на 1000 таргетов наподобие userver или folly, я бы пока отдельным исполняемым файлом оставил.
There was a problem hiding this comment.
Предлагается сделать на бинарь, который внутри просто будет вызывать кланг, в кланг это встраивать не нужно
| if (current_schedule_length == priority_change_points[i]) { | ||
| priorities[index_of_max] = current_depth - i; | ||
|
|
||
| if (round_robin_stage > 0) [[unlikely]] { |
There was a problem hiding this comment.
Мб это в Base вынести или хотя бы в функцию, чтобы не дублировать?
There was a problem hiding this comment.
Можно вынести в функцию, которая будет зависеть от лямбды в качестве параметра (task_index), но это общая проблема копипасты в минимизации, ее надо комплексно решать
There was a problem hiding this comment.
Ну давай просто тут вынесем хотя бы, я считаю, что проблему копипасты нужно решать по мере ее появления
| for (size_t i = 0; i < 1000 && !is_returned; ++i) { | ||
| Resume(); | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
Мб ассерт добавить в конец?
Reset(), more fairly creating new TargetObj on a new roundsimple_mutexexample does not work with pct strategy onmasterbranch #12nonlinear_mutexexample) onmasterbranch #13::std::atomic<T>toLTestAtomic<T>) #14 & refactor this code